package day20170410.homework;

import java.util.Scanner;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import utils.ArrayUtil;

public class ArraysCRUD {
	
	private int[] intArrays = {100,5,43,67,7,8,9,30};
	Scanner scanner = null;
	
	@Before
	public void before() throws Exception {
		scanner = new Scanner(System.in);
	}
	
	@After
	public void after() throws Exception {
		scanner.close();
	}
	
	/**
	 * 元素增加测试
	 * @throws Exception
	 */
	@Test
	public void createElementTest() throws Exception {
		System.out.println("需要增加的元素：");
		int data = scanner.nextInt();
		createElement(data);
	}
	
	/**
	 * 元素增加
	 * 1.增加的元素判断是否存在，存在无法添加，不存在则可以
	 * 2.新建一个新数组长度为老数组的长度+1，把老数组的值赋值到新数组
	 * 3.再把intArrays老数组的指针指向新的数组（重点）
	 * @param data		需要增加的元素
	 */
	public void createElement(int data){
		int[] newArrays = new int[intArrays.length+1];
		int index = gudegeElement(intArrays, data);
		
		if(index != -1){
			System.out.println("你输入的元素" + data + "已存在...");
		}else{
			for(int i=0; i<intArrays.length; i++){
				int value = intArrays[i];
				//旧数组赋值到新的数组
				newArrays[i] = value;
			}
			int length = newArrays.length;
			//把新加的元素赋值到最后一位
			newArrays[length-1] = data;
			//调用工具类进行排序
			ArrayUtil.quickSort(newArrays, 0, length-1);
			//重点，把intArrays数组的指针指向新数组
			intArrays = newArrays;
			//打印数组
			ArrayUtil.arrayPrint(intArrays);
		}
	}
	
	/**
	 * 删除元素测试
	 * @throws Exception
	 */
	@Test
	public void deleteElementTest() throws Exception {
		System.out.println("输入你要删除的元素：");
		int data = scanner.nextInt();
		int index = gudegeElement(intArrays, data);
		
		if(index == -1){
			System.out.println("你输入的元素" + data + "不存在");
		}else{
			deleteElement(index);
		}
	}
	
	/**
	 * * 删除元素
	 * 1.首先判断是否存在这个元素，如果存在则删除，否则提示元素不存在
	 * 2.拿返回的下标进行删除，后面的元素往前面移动
	 * @param index		删除元素的下标
	 */
	public void deleteElement(int index){
		int[] newArrays = new int[intArrays.length-1];
		
		for(int i=0; i<intArrays.length; i++){
			int value = intArrays[i];
			if(i < index){
				//旧数组的值赋值到新数组
				newArrays[i] = value;
			}else if(i == index){
				//结束本次循环，继续下次循环
				continue;
			}else{
				//后面一个元素往前面移动
				newArrays[i-1] = value;
			}
		}
		
		//重点，把intArrays数组的指针指向新数组
		intArrays = newArrays;
		//调用工具类进行排序
		ArrayUtil.quickSort(intArrays, 0, intArrays.length-1);
		//打印数组
		ArrayUtil.arrayPrint(intArrays);
	}
	
	/**
	 * 修改元素测试类
	 * @throws Exception
	 */
	@Test
	public void updateElementTest() throws Exception {
		int oldName = 100;
		int newName = 999;
		int index = gudegeElement(intArrays, oldName);
		if(index == -1){
			System.out.println("输入的元素" + oldName + "不存在");
		}else{
			updateElement(index, newName);
		}
	}
	
	/**
	 * 修改元素
	 * 1.先判断这个元素是否存在数组，如果存在则可以修改，不存在则显示元素不存在
	 * 2.拿到这个元素的下标进行修改（数组操作的方法只能通过下标）
	 * @param index		需要修改的下标
	 */
	public void updateElement(int index,int newName){
		//拿到下标进行修改
		intArrays[index] = newName;
		//调用工具类进行排序
		ArrayUtil.quickSort(intArrays, 0, intArrays.length-1);
		//调用工具类打印
		ArrayUtil.arrayPrint(intArrays);
	}
	
	/**
	 * 查询元素测试
	 * @throws Exception
	 */
	@Test
	public void retrieveElementTest() throws Exception {
		retrieveElement();
	}
	
	/**
	 * 元素查询
	 */
	public void retrieveElement(){
		//调用工具类进行排序
		ArrayUtil.quickSort(intArrays, 0, intArrays.length-1);
		//调用工具类进行打印
		ArrayUtil.arrayPrint(intArrays);
	}
	
	public int gudegeElement(int[] intArrays,int data){
		//默认不存在元素
		int k = -1;
		
		for(int i=0; i<intArrays.length; i++){
			if(data == intArrays[i]){
				//返回元素的下标
				return i;
			}
		}
		
		return k;
	}
}
